# -*- coding: utf-8 -*-
"""
蓝图自动注册模块
"""

import os
import importlib
from flask import Flask
import sys
import logging

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

# 导入日志模块
try:
    from logger import get_module_logger
    logger = get_module_logger('blueprints')
except ImportError:
    # 如果无法导入日志模块，使用基本日志
    import logging
    logging.basicConfig(level=logging.INFO)
    logger = logging.getLogger('blueprints')

def register_blueprints(app: Flask):
    """
    自动注册所有蓝图
    会自动发现blueprints目录下所有包含blueprint的模块并注册
    """
    # 获取blueprints目录路径
    blueprints_dir = os.path.dirname(__file__)
    
    logger.info(f"开始自动注册蓝图，目录: {blueprints_dir}")
    
    registered_count = 0
    
    # 遍历目录中的所有.py文件
    for filename in os.listdir(blueprints_dir):
        # 只处理.py文件，跳过__init__.py和其他特殊文件
        if filename.endswith('.py') and filename != '__init__.py':
            # 去掉.py后缀得到模块名
            module_name = filename[:-3]
            
            try:
                # 动态导入模块
                module = importlib.import_module(f'blueprints.{module_name}')
                
                # 如果模块中有blueprint对象，就注册它
                if hasattr(module, 'blueprint'):
                    app.register_blueprint(module.blueprint)
                    logger.info(f'已注册蓝图: {module_name}')
                    registered_count += 1
                else:
                    logger.warning(f'跳过模块 {module_name}: 未找到blueprint属性')
                    
            except Exception as e:
                logger.error(f'注册蓝图 {module_name} 失败: {e}')
    
    logger.info(f"蓝图注册完成，共注册 {registered_count} 个蓝图")

# 为了保持兼容性，仍然导出所有蓝图模块名
__all__ = [
    'login',
    'framework',
    'main',
    'fife',
    'traffic_statistics',
    'dns',
    'switch_directory',
    'GetIndex',
    'GetRewriteList',
    'ssl',
    'docker',
    'reverse_proxy',
    'config_api'
]